import os
import json
from flask import Blueprint, render_template
from my_const import EVALUATION_RESULT_DIR, MY_FUND_YML
from util.yml_util import read_fund_yml

from util.log_util import get_the_logger
logger = get_the_logger(__name__)

main_bp = Blueprint('main', __name__)

@main_bp.route('/')
def index():
    """主页：展示最新评估结果和导航"""
    # 1. 读取最新评估结果（显示所有策略类型的基金）
    latest_results = []
    eval_date = "暂无数据"
    try:
        # 查找最新的评估结果文件（支持MA和DROP策略）
        result_files = [f for f in os.listdir(EVALUATION_RESULT_DIR) if f.startswith('result_')]
        if result_files:
            # 按日期排序，取最新的文件
            result_files.sort(reverse=True, key=lambda x: x.split('_')[1])  # 按日期降序
            
            # 查找最新的MA_90d和DROP结果文件
            latest_ma_file = None
            latest_drop_file = None
            
            for f in result_files:
                if '_ma_' in f and f.endswith('_90d.json'):
                    latest_ma_file = f
                    break
                    
            for f in result_files:
                if f.endswith('_drop.json'):
                    latest_drop_file = f
                    break
            
            # 收集所有策略的结果
            all_results = []
            
            # 读取DROP策略结果（如果存在）
            if latest_drop_file:
                with open(os.path.join(EVALUATION_RESULT_DIR, latest_drop_file), 'r', encoding='utf-8') as f:
                    drop_results = json.load(f)
                    # 为DROP策略结果添加策略标识
                    for item in drop_results:
                        item['strategy'] = 'Drop'
                    all_results.extend(drop_results)
                eval_date = latest_drop_file.split('_')[1]
                
            # 读取MA_90d策略结果（如果存在）
            if latest_ma_file:
                with open(os.path.join(EVALUATION_RESULT_DIR, latest_ma_file), 'r', encoding='utf-8') as f:
                    ma_results = json.load(f)
                    # 为MA策略结果添加策略标识和天数
                    for item in ma_results:
                        item['strategy'] = 'MA'
                    all_results.extend(ma_results)
                # 如果没有DROP文件，则使用MA文件的日期
                if not latest_drop_file:
                    eval_date = latest_ma_file.split('_')[1]
            
            if all_results:
                eval_date = f"{eval_date[:4]}-{eval_date[4:6]}-{eval_date[6:]}"  # 格式化日期

                # 筛选“建议买入”的基金并排序（按年化收益率降序）
                buy_results = [item for item in all_results if item.get('should_buy') is True]
                buy_results.sort(key=lambda x: x.get('annual_return', 0), reverse=True)
                
                # 取前n条建议买入的基金（精简展示）
                latest_results = buy_results[:100]
                
    except Exception as e:
        logger.info(f"读取最新评估结果失败: {e}")

    # 2. 读取基金配置的基本信息（总数）
    funds = read_fund_yml(MY_FUND_YML)
    fund_count = len([k for k in funds if not k.startswith('#')])  # 排除注释行

    return render_template('index.html',
                           latest_results=latest_results,
                           eval_date=eval_date,
                           fund_count=fund_count)